package cn.wit.test;

import java.io.BufferedInputStream;
import java.io.Closeable;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

//创建一个服务器，接受客户端请求
//改进，能同时接受多个服务连接请求，让read到另外一个线程里面去
public class Srever2 {
	
	public static void main(String[] args) {

		ServerSocket server = null;
		
		// 端口不能使用1024以下，会抛出异常
		try {
			// 创建一个服务
			server = new ServerSocket(6666);

			System.out.println("服务器启动了，准备接受连接。。。");
			
			while(true) {
				
				Socket socket = server.accept();// socket代表连接上得客户端
				
				System.out.println("连上了一个客户端:" + socket.getInetAddress() + "端口：" + socket.getPort());
				
				//开启一个异步线程
				new Thread(new ClientThread(socket)).start();
			}
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 在这里关闭资源,这里只关server，让子线程去关闭其它得，不然会出错
			Utils.closeQuietly(server);
		}
	}
}
//作用：和每一个连接得客户端进行异步通信
class ClientThread implements Runnable{

	private DataInputStream inputStream;
	
	private Socket socket;
	
	public ClientThread(Socket scoket) {
		
		this.socket = scoket;
	}
	
	@Override
	public void run() {
		// 开始通信
		try {
			
			inputStream = new DataInputStream(
			new BufferedInputStream(socket.getInputStream()));
			
			while(true) {
				
				String message= inputStream.readUTF();
				System.out.println(message);
				
				if("88".equals(message)) {
					break;
				}
			}
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//关闭资源
			Utils.closeQuietly(inputStream);
			Utils.closeQuietly(socket);
		}

	}
	
}
